/**
 * N*N的方阵，每格依次包含一个数字，从1到N方。
 * 再给定长度为T的数组A，第i次将包含Ai的方格染色。
 * 问第几轮时，第一次出现行或列或主对角线或反对角线全部染色。
 * 模拟即可。
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>

using llt = long long;
using vi = vector<int>;
using pii = pair<int, int>;
using vpii = vector<pii>;
using vll = vector<llt>;

template<typename T>
void input(vector<T> & a, int n){
    a.assign(n + 1, {});
    for(int i=1;i<=n;++i) cin >> a[i];
    return;
}

template<typename T>
istream & operator >> (istream & is, vector<T> & v){
    for(auto & i : v) is >> i;
    return is;
}

int N, T;
vi A;
vi Row, Col;
int D, U;

bool proc(int v){
    int c = (v - 1) % N + 1;
    if(++Col[c] == N) return true;

    int r = (v - 1) / N + 1;
    if(++Row[r] == N) return true;

    if(r == c){
        if(++D == N) return true;
    } 

    if(r + c == N + 1){
        if(++U == N) return true;
    }

    return false;
}

int proc(){
    Row.assign(N + 1, 0);
    Col.assign(N + 1, 0);
    D = U = 0;
    int k = 0;
    for(auto i : A){
        ++k;
        if(proc(i)) return k;     
    }
    return -1;
}

void work(){
    cin >> N >> T;
    A.assign(T, {});
    cin >> A;
    cout << proc() << endl;
    return; 
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase;

    while(nofkase--) work();
    return 0;
}